﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using CapaNegocio;
using Excepciones;

namespace CapaWeb
{
    public partial class RetiroDePremio : System.Web.UI.Page
    {
        private Admin admin = new Admin();

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                DataSet ds = new DataSet();
                int nroCliente = (int)Session["nroCliente"];
                ds = admin.buscarEnBDNroCliente("cliente", nroCliente);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    //session no vacia
                    //cargar datos del cliente
                    string nombre = (string)ds.Tables[0].Rows[0].ItemArray[3];
                    Label1Nombre.Text = nombre;

                    int puntosAcum = (int)ds.Tables[0].Rows[0].ItemArray[5];
                    Label1Puntos.Text = puntosAcum.ToString();

                    //cargar datos de premios
                    DataTable dt= new DataTable();
                    string unaTabla= "premio";
                    dt= admin.listar(unaTabla);
                    if (dt.Rows.Count > 0)
                    {
                        GridView1.DataSource = dt;
                        GridView1.DataBind();
                    }
                    else
                    {
                        string estadoListaPremio = " Disculpe, actualmente no hay premios para solicitar, intente más tarde, gracias.";
                        Label1EstadoLista.Text = estadoListaPremio;
                    }
                }
                else
                {
                    //no devolvio registros
                    string msj = "ERROR: variable session vacia. ";
                    Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
                }
            }

            catch (NullReferenceException ex)
            { }
            catch (HttpException ex)
            { }
        }

        //BOTON QUE VUELVE AL MENU CLIENTE (NO ENCONTRE OTRA FORMA DE VOLVER A LA PAGINA ANTERIOR)
        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Redirect("MenuCliente.aspx");
        }

        //BOTON ACEPTAR, QUE HACE LA SOLICITUD DEL PREMIO
        //EL CLIENTE INGRESA EL NUMERO DEL PREMIO QUE DESEA SOLICITAR
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                int nroPremio = int.Parse(TextBox1.Text);
                if (nroPremio == 0)
                    throw new nroInvalido();
                if (nroPremio.ToString().Length == 0)
                    throw new Blanco();

                DataSet ds = new DataSet();
                ds = admin.buscarEnBDNroPremio(nroPremio);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    //EXISTE EL PREMIO

                    //DATOS DEL PREMIO
                    //tengo nroPremio
                    int puntosNece = (int)ds.Tables[0].Rows[0].ItemArray[2];
                    //tengo los puntos necesarios
                    int stock = (int)ds.Tables[0].Rows[0].ItemArray[3];
                    //tengo el stock

                    //VALIDO EL STOCK
                    if (stock == 0)
                        throw new StockInvalido();

                    //DATOS CLIENTE
                    DataSet ds2 = new DataSet();
                    int nroCliente = (int)Session["nroCliente"];
                    ds2 = admin.buscarEnBDNroCliente("cliente", nroCliente);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        //tengo el nroCliente
                        int puntosAcum = (int)ds2.Tables[0].Rows[0].ItemArray[5];
                        //tengo los puntos acumulados

                        //calculo los puntos actuales
                        int puntosActu = puntosAcum - puntosNece;
                        //valido los puntos
                        if (puntosActu < 0)
                            throw new PuntosInvalidos();

                        if (admin.altaRetiroPremio(nroCliente, nroPremio, puntosActu, stock - 1, DateTime.Today) == true)
                        {
                            //alta con exito
                            string msj = "Se realizo con éxito su solicitud de premio. ";
                            Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
                        }
                        else
                        {
                            //error en alta
                            string msj = "ERROR: no ha podido realizarse la solicitud del premio. ";
                            Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
                        }
                    }
                    else
                    {
                        //NO EXISTE EL CLIENTE - no devolvio registro
                        string msj = "ERROR: El cliente no existe. ";
                        Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
                    }
                }
                else
                {
                    //NO EXISTE EL PREMIO - no devolvio registro
                    string msj = "ERROR: El premio no existe. ";
                    Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
                }
            }



            catch (NullReferenceException ex)
            { }
            catch (HttpException ex)
            { }
            catch (PuntosInvalidos ex)
            {
                string msj = "ERROR: su cantidad de puntos no permite realizar su solicitud. ";
                Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
            }
            catch (FormatException ex)
            {
                string msj = "ERROR: debe ingresar el tipo de dato correcto. ";
                Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
            }
            catch (OverflowException ex)
            { }
            catch (StockInvalido ex)
            {
                string msj = "ERROR: El premio no tiene el stock suficiente para solicitarlo. ";
                Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
            }

            finally
            {
                //DEBO ACTUALIZAR EL LABEL CON PUNTOS ACUMULADOS
                DataSet ds = new DataSet();
                int nroCliente = (int)Session["nroCliente"];
                ds = admin.buscarEnBDNroCliente("cliente", nroCliente);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    int puntosAcum = (int)ds.Tables[0].Rows[0].ItemArray[5];
                    Label1Puntos.Text = puntosAcum.ToString();
                }
                else
                {
                    //NO EXISTE EL CLIENTE - no devolvio registro
                    string msj = "ERROR: El cliente no existe. ";
                    Response.Write("<script lenguaje=\"javascript\"> alert('" + msj + "') </script> ");
                }

                //ACTUALIZAR LA LISTA DE PREMIOS CON EL STOCK ACTUALIZADO
                DataTable dt = new DataTable();
                string unaTabla = "premio";
                dt = admin.listar(unaTabla);
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
        }





    }
}
